package com.lekang.util;

import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.ThreadLocalRandom;

/**
 * 生成编号：前缀+当前年月日+8位随机数
 * 格式示例：TK2025101612345678
 */
public class NumberGenerator {

    /**
     * 生成自定义前缀的编号
     * @param prefix 前缀（如"TK"）
     * @return 格式为"前缀+YYYYMMDD+8位随机数"的字符串
     */
    public static String numberGeneration(String prefix) {
        // 1. 校验前缀（避免null导致拼接异常）
        if (prefix == null) {
            throw new IllegalArgumentException("前缀不能为null");
        }

        // 2. 获取当前年月日（YYYYMMDD）
        // 注意：默认使用系统时区，如需固定时区（如北京时间），可改为 ZoneId.of("Asia/Shanghai")
        LocalDate currentDate = LocalDate.now(ZoneId.systemDefault());
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        String dateStr = currentDate.format(dateFormatter);

        // 3. 生成8位随机数（范围：00000000-99999999）
        // 使用ThreadLocalRandom（多线程环境更安全高效）
        int randomNum = ThreadLocalRandom.current().nextInt(0, 100000000); // 0 ≤ 随机数 < 100000000
        String randomStr = String.format("%08d", randomNum); // 不足8位补0

        // 4. 拼接最终编号
        return prefix + dateStr + randomStr;
    }

    // 测试示例
    public static void main(String[] args) {
        // 生成退款编号（前缀"TK"）
        String refundNo = numberGeneration("TK");
        System.out.println("生成的退款编号：" + refundNo); // 示例输出：TK2025101612345678
    }
}